Preamble


In [1]:
%pylab inline
%load_ext physics
from __future__ import division
from matplotlib.pyplot import plot
import matplotlib.pyplot as plt
import numpy as np
from numpy import sqrt, cos, sin, log, exp
from lmfit import lmfit
from matplotlib.path import Path
import matplotlib.patches as patches 
import scipy.constants as const
matplotlib.rcParams.update({'font.size': 14, 'font.family': 'serif'})


Welcome to pylab, a matplotlib-based Python environment [backend: module://IPython.zmq.pylab.backend_inline].
For more information, type 'help(pylab)'.
Unit calculation and physics extensions activated.

Idler Wavelength

Eine elektromagnetische Welle $\mathbf{E}$, die auf ein dielekrisches Medium fällt, erzeugt eine dielektrische Polarisation $$ \mathbf{P}(E) = \varepsilon_0 (\chi^{(1)}\mathbf{E} + \chi^{(2)}\mathbf{E}^2 + \chi^{(3)}\mathbf{E}^3 + \ldots )$$ mit Suszeptibilität n-ter Ordnung $\chi^{(n)}$.

DFG

$$\omega_\mathrm{DF} = \omega_1 - \omega_2 $$$$ \omega_1 = \omega_2 + \omega_\mathrm{DF}, $$

where $\omega_1 > \omega_2$


In [6]:
def dfg(lambda1, lambda2=None, dfg=None):
    """
    lambda1, lambda2, dfg: Wavelength of the waves in nm.
    Notice that lambda1 > lambda2 when calculating lambda2 from lambda1 and dfg.
    """
    if dfg == None:
        return 1/(abs(1/lambda1 - 1/lambda2))
    else:
        f2 = 1/lambda1 + 1/dfg
        return 1/f2

In [7]:
print dfg(1064, 688)
print dfg(1064, dfg=1950)


1946.89361702
688.387524884

OPA


In [8]:
def idler(pump, signal=None, idler=None):
    """
    pump, signal, idler: Wavelength of the waves in nm.
    """
    if idler == None:
        return dfg(pump, signal)
    else:
        return dfg(pump, dfg=-idler)

In [9]:
print idler(1064, dfg(1064, 688))
print idler(1064, idler=2346)


2346.25641026
1947.07020281

In [25]: